fix(css): lantai dukungan 360px dapat angka jujur dan gerbang pemeriksa - #111
Merged
Merged
Conversation
`.grid-cards` menulis `minmax(320px, 1fr)`, dan pada lantai dukungan 360px `.container` menyisakan ruang bersih PERSIS 320px — track selebar 320px di ruang 320px pas TANPA sisa sama sekali. box-sizing: border-box menyelamatkannya hari ini, tapi pembulatan sub-piksel atau border yang kelak ditambahkan ke .card akan mendorong gulir mendatar persis di lebar yang dijanjikan repo ini untuk didukung, tanpa satu gerbang pun memerah. - src/styles/global.css: .grid-cards kini minmax(min(320px, 100%), 1fr) — identik di setiap lebar >=320px, tidak lagi bisa dipaksa overflow. - AGENTS.md, AGENTS.id.md, ui-ux-design-system.md(.id.md): "kartu 328px, skala 0.41" adalah aritmetika untuk padding 1rem yang sudah lama tidak sama dengan padding 1.25rem .container yang sungguh berlaku. Diperbaiki ke 320px/skala 0.40; kesimpulan (di bawah 9px, tak terbaca) tidak berubah. - tests/lebar-360.test.mjs (baru): membaca padding .container dan lantai 360px dari CSS-nya sendiri, menolak minmax/width/min-width tetap lain yang mencapai lebar bersih tanpa jalan keluar, dan menjaga angka kartu/skala di AGENTS.md tetap sinkron dengan aritmetika CSS. Gerbang statik atas teks CSS — batasnya dinyatakan di docblock-nya sendiri. - AGENTS.md/.id.md dan SKILL gerbang menyebut gerbang baru ini; hitungan bun test di keenam dokumen naik dari 39 ke 40 (tests/documented-counts). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…uma global.css Cacat yang sama persis yang membuat gerbang ini ditulis ternyata punya DUA instans, bukan satu: `.sorotan` di `src/components/views/Home.astro` menulis `minmax(20rem, 1fr)` — 20rem = 320px, sama seperti `.grid-cards` yang sudah diperbaiki, di dalam `<main class="container">` yang sama. Draf pertama tests/lebar-360.test.mjs hanya membaca `src/styles/global.css` dan tetap hijau di atas kasus ini — gerbang yang mengubah "tidak diperiksa" menjadi "diperiksa dan aman" padahal cacatnya masih ada, persis kelas kegagalan yang paling dihindari repo ini. - src/components/views/Home.astro: .sorotan kini minmax(min(20rem, 100%), 1fr) — unit rem dipertahankan. - tests/lebar-360.test.mjs: kini menyusuri setiap blok <style> di setiap .astro di bawah src/ (komponen, layout, halaman), bukan cuma global.css. Dasar rem=16px dikonfirmasi lewat grep atas seluruh html/:root di repo ini, bukan diasumsikan. Menambah pengecualian untuk aturan yang dikeluarkan dari alur normal (position: absolute/fixed, contoh nyata: .hero-banner-grid::after) dan untuk komentar CSS yang mengutip pola lama sebagai contoh (tanpanya, komentar penjelas di atas .sorotan sendiri jadi false positive). - Terbukti gigit: minmax(320px,1fr) dan min-width:400px yang disuntik ke blok <style> komponen (FaqAccordion.astro, Breadcrumb.astro) membuat gerbang merah dan menyebut berkas yang benar; keduanya dipulihkan. - AGENTS.md/.id.md, SKILL gerbang, ui-ux-design-system.md/.id.md, dan changeset diperbarui supaya tidak lagi menyebut cakupan gerbang sebagai "global.css saja". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Uji independen menyuntik `.zz { min-width: 500px; }` sebagai SATU baris
ke dalam blok <style> komponen, dan gerbang tetap 5 pass/0 fail — tidak
menggigit. Sebabnya: pemindaian width/min-width dijangkarkan ke
`^[ \t]*`, yang hanya cocok kalau deklarasinya membuka barisnya sendiri.
Format satu-baris itu CSS yang sah dan lazim di blok <style> ringkas,
jadi gerbangnya bisa dielakkan lewat format saja — kelasnya belum
benar-benar tertutup.
- tests/lebar-360.test.mjs: regex diganti ke lookbehind `(?<=[{;])` —
syarat struktural deklarasi CSS yang sah bukan "di awal baris",
melainkan "didahului { atau ;", benar di format satu-baris maupun
multi-baris. Lookbehind (bukan `[{;]` yang mengonsumsi) dipilih supaya
dua deklarasi di satu baris yang sama tidak saling menghabiskan
pembatasnya. `posProperti` dihitung ulang dari posisi `m[1]` di dalam
`m[0]` supaya nomor baris dan pemeriksaan zona (komentar, media
desktop) tetap menunjuk ke deklarasinya sendiri, bukan ke karakter
sebelum properti yang ditinggalkan lookbehind yang zero-width.
- Diverifikasi dua alasan independen kenapa `@media (min-width: 640px)`
tetap tidak tertangkap: karakter sebelum "min-width" adalah `(` (bukan
`{`/`;`), dan yang mengikuti angkanya adalah `)` (bukan `;`).
- Terbukti gigit: format satu-baris tanpa jalan keluar (baru), format
multi-baris lama, dan padding/minmax yang sudah diverifikasi
sebelumnya. Format satu-baris DENGAN overflow-x: auto tetap lolos.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ringkasan
Audit menemukan dua cacat nyata di sekitar komitmen "mobile-first dari 360px" yang didokumentasikan repo ini, plus fakta bahwa komitmen itu tidak punya satu pun pemeriksa otomatis. Ketiganya diperbaiki sebagai satu keping atomik — dan review menemukan bahwa cacat inti punya dua instans, bukan satu, karena draf pertama gerbangnya sendiri hanya membaca
src/styles/global.css.Cacat 1 — risiko overflow tanpa sisa di lantai dukungan (DUA tempat)
.container(src/styles/global.css) memasangpadding: 0 1.25rem— 20px tiap sisi, 40px total. Pada lantai dukungan 360px yang didokumentasikan, ruang bersihnya karena itu PERSIS 320px. DUA tempat menulis track grid tepat di angka itu, di dalam<main class="container">(BaseLayout.astro):Sebuah track selebar 320px di ruang 320px pas TANPA sisa sama sekali.
box-sizing: border-boxmenyelamatkannya hari ini, tapi pembulatan sub-piksel atau border/outline/shadow yang kelak ditambahkan ke.card/.sorotanakan mendorong gulir mendatar persis di lebar yang dijanjikan repo ini untuk didukung — dan tidak ada satu gerbang pun yang akan memerah karenanya.Perbaikan:
minmax(min(320px, 100%), 1fr)danminmax(min(20rem, 100%), 1fr)(unit rem dipertahankan diHome.astrokarena itulah yang dipakai berkas itu) — identik hasilnya di setiap lebar ≥320px, hanya tidak lagi bisa dipaksa overflow oleh track-nya sendiri. Diverifikasi tidak adaminmax(<N>px|rem, …)ataumin-widthtetap lain disrc/styles/global.cssATAU di blok<style>mana pun di bawahsrc/yang duduk di margin sama atau lebih buruk (SitemapView.astro280px,Home.astro11rem/15rem — semua nyaman di bawah 320px, tidak disentuh).Cacat 2 — aritmetika dokumentasi tidak cocok dengan CSS
AGENTS.mddandocs/awcms-astro/ui-ux-design-system.md(plus cermin.id.md) menulis "kartu 328px — viewport 360px — kanvas 800px tampil pada skala 0.41". 328px mengasumsikan padding 1rem; padding.containeryang sungguh berlaku adalah 1.25rem, jadi lebar kartu sungguhan adalah 320px dan skalanya 0.40 (320/800). Kesimpulannya tidak berubah (22px × 0,40 = 8,8px, tetap di bawah 9px dan praktis tidak terbaca) — hanya kedua angka yang salah. Diperbaiki di keempat berkas.Cacat 3 — aturan tanpa pemeriksa (dan pemeriksanya sendiri hampir punya lubang yang sama)
tests/lebar-360.test.mjs(baru) membaca lantai 360px dan padding sisi.containerdari CSS-nya sendiri (bukan menulis ulang "320" sebagai angka tetap), lalu menolak — disrc/styles/global.cssDAN di setiap blok<style>dari setiap.astrodi bawahsrc/(komponen, layout, halaman), bukan hanyaglobal.css:minmax(<N>px|rem, …)yang mencapai atau melebihi lebar bersih tanpa dibungkusmin(…, 100%);width/min-widthtetap yang lebih lebar dari itu, kecuali menu/dropdown/target sentuh, media query khusus layar lebar, aturanposition: absolute/fixedyang dikeluarkan dari alur normal, atau punyaoverflow-xpada dirinya sendiri;AGENTS.mdyang tidak lagi sinkron dengan aritmetika CSS yang sebenarnya.Draf pertama gerbang ini hanya membaca
global.cssdan tetap HIJAU di atas.sorotan— persis bentuk kegagalan paling dihindari repo ini: gerbang yang mengubah "tidak diperiksa" menjadi "diperiksa dan aman" padahal cacatnya masih ada di berkas lain. Cakupannya diperbaiki sebelum PR ini dianggap selesai. Dasar rem→px (1rem = 16px) dikonfirmasi lewatgrepatas seluruhhtml/:rootdi repo ini, bukan diasumsikan.Gerbang ini STATIK atas teks CSS — dinyatakan terus terang di docblock-nya: ia tidak bisa membuktikan keamanan render sungguhan (pembulatan sub-piksel, metrik font nyata, scrollbar sungguhan, clipping ancestor sungguhan), yang butuh pemeriksaan headless-browser
document.documentElement.scrollWidth <= 360atas halaman yang sudah dibangun, terhadapawcmsbackend yang hidup.Terbukti gigit EMPAT kali (dua regresi × dua cakupan):
minmax(320px, 1fr)disuntik ke.grid-cardsdiglobal.css, lalu ke<style>FaqAccordion.astro;min-width: 400pxdisuntik ke.carddiglobal.css, lalu ke<style>Breadcrumb.astro. Semuanya membuat gerbang merah dengan pesan yang menyebut berkas dan baris yang tepat, lalu dipulihkan.AGENTS.md/.id.md§Antarmuka, item Definition of Done tentang 360px, dan.claude/skills/awcms-astro-gerbang/SKILL.md/.id.mdkini menyebut gerbang baru ini DAN cakupan berkasnya yang sebenarnya (bukan lagi "global.css saja"); hitunganbun testdi keenam dokumen yang dijagatests/documented-counts.test.mjsnaik dari 39 ke 40.Verifikasi
bun test— 782 pass / 12 skip / 0 fail (40 berkas, naik dari 39)bun test tests/lebar-360.test.mjs— 5 pass / 0 failbun run check— 0 errors, 0 warnings baru (5 hints pra-eksisting, tidak terkait)bun run audit:dokumen— tidak ada pelanggaranbun run audit:translation— OK, 64 mirror currentbun run audit:graf— tidak ada pelanggaranbun run audit:rilis— tidak ada pelanggaran (1 changeset menunggu, 0 hari)bun run check:lockfile— sinkronTest plan
bun testhijau (782 pass, 0 fail)tests/lebar-360.test.mjsterbukti merah pada EMPAT suntikan regresi (bareminmax(320px,1fr)danmin-width:400px, masing-masing diglobal.cssdan di sebuah blok<style>komponen), lalu hijau lagi setelah dipulihkan🤖 Generated with Claude Code